题意:有$n$个点,$n-1$条边,每个点上有$c_{i}$个人.要选一个点使所有人到这个点的距离最小
观察如果已经知道$1$号节点所需的时间
那么,我们可以做如下假设:
① 所有的牛首先到达了$1$号节点
② $3$号节点以及他子树上的节点都需要退回$1->3$的路径的长度
③ 除了$3$号节点以及他子树上的节点都需要前进$1->3$的路径的长度
通过上面的三条东西,我们就可以从任意一个父节点推出子节点的时间
所以,又是一遍$O(n)$的计算就可以推出最终的答案
$d[v] = d[u] - size[v]\times e[i].w + (n - size[v])*e[i].w;$
1 |
|